{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Overview\n",
    "\n",
    "Behind the scenes, even pure Python widgets are composed of two pieces:\n",
    "\n",
    "+ Python, which runs in the notebook kernel.\n",
    "+ Javascript, which runs in the browser.\n",
    "\n",
    "When writing your own widgets, that means making a choice: write only in Python or write in both Python and Javascript.\n",
    "\n",
    "Which to choose depends on what you are trying to accomplish. This tutorial will focus on writing your own widgets in pure Python. An example of a pure-Python package that includes some interesting interfaces is [reducer](http://reducer.readthedocs.io), a package for calibrating astronomical data.\n",
    "\n",
    "What you can accomplish with just Python has increased quite a bit in the last year or two as more sophisticated tools that plug in to the Jupyter widget ecosystem have been written.\n",
    "\n",
    "One of those tools is [bqplot](https://github.com/bloomberg/bqplot/blob/master/examples/Index.ipynb), which provides a plotting tools in which the plot, and the lines, markers, labels and legend, all act as widgets. That required both Python *and* javascript. On the javacsript side bqplot uses [d3](https://d3js.org/) to do the drawing in the browser. \n",
    "\n",
    "Another example is [ipyvolume](https://ipyvolume.readthedocs.io/en/latest/), which does three-dimensional renderings of point or volumetric data in the browser. It has both Python and javascript pieces.\n",
    "\n",
    "One last addition is in `ipywidgets` itself: the new `Output` widget can display any content which can be rendered in a Jupyter notebook. That means that anything you can show in a notebook you can include in a widget using only Python."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Our destination, in a nutshell\n",
    "\n",
    "+ Green: [pythreejs](https://github.com/jupyter-widgets/pythreejs)\n",
    "+ Blue: [bqplot](https://github.com/bloomberg/bqplot/blob/master/examples/Index.ipynb)\n",
    "+ Everything else: [ipywidgets](https://github.com/jupyter-widgets/ipywidgets)\n",
    "+ Serving it up to users during development on [mybinder.org](https://mybinder.org/)\n",
    "\n",
    "![Binary Star Simulator](images/Binary_Star_Sim.png)\n",
    "\n",
    "### Source for this example (including links to binder): https://github.com/JuanCab/AstroInteractives"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "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\n",
      "text/html": [
       "\n",
       "        <iframe\n",
       "            width=\"400\"\n",
       "            height=\"300\"\n",
       "            src=\"https://www.youtube.com/embed/kbgST0uifvM\"\n",
       "            frameborder=\"0\"\n",
       "            allowfullscreen\n",
       "        ></iframe>\n",
       "        "
      ],
      "text/plain": [
       "<IPython.lib.display.YouTubeVideo at 0x1039afeb8>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.display import YouTubeVideo\n",
    "YouTubeVideo(\"kbgST0uifvM\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
